package com.inkFlow.crawl.domain.vo;

import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import com.inkFlow.common.excel.annotation.ExcelDictFormat;
import com.inkFlow.common.excel.convert.ExcelDictConvert;
import com.inkFlow.crawl.domain.CrawlSourceConfigExtTextRule;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;


/**
 * 爬虫管理-小说文本规则视图对象 crawl_source_config_ext_text_rule
 *
 * @author inkFlow
 * @date 2025-08-22
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = CrawlSourceConfigExtTextRule.class)
public class CrawlSourceConfigExtTextRuleVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 爬虫id
     */
    @ExcelProperty(value = "爬虫id")
    private Integer crawlId;

    /**
     * 分类页面分类id数组
     */
    @ExcelProperty(value = "分类页面分类id数组")
    private String categoryPageIdList;

    /**
     * 分类页面地址
     */
    @ExcelProperty(value = "分类页面地址")
    private String categoryPageUrlRule;

    /**
     * 分类页面总分页
     */
    @ExcelProperty(value = "分类页面总分页")
    private String categoryTotalPageRule;

    /**
     * 分类页面下一页地址
     */
    @ExcelProperty(value = "分类页面下一页地址")
    private String categoryNextPageRule;

    /**
     * 分类页面小说Id规则
     */
    @ExcelProperty(value = "分类页面小说Id规则")
    private String categoryBookIdRule;

    /**
     * 分类页面小说名称规则
     */
    @ExcelProperty(value = "分类页面小说名称规则")
    private String categoryBookNameRule;

    /**
     * 分类页面小说地址规则
     */
    @ExcelProperty(value = "分类页面小说地址规则")
    private String categoryBookUrlRule;

    /**
     * 需要拼接的小说地址，分类小说地址为短路径时使用
     */
    @ExcelProperty(value = "需要拼接的小说地址，分类小说地址为短路径时使用")
    private String categoryBookJoinUrl;

    /**
     * 小说详情页作者规则
     */
    @ExcelProperty(value = "小说详情页作者规则")
    private String bookInfoAuthorRule;

    /**
     * 小说详情页封面规则
     */
    @ExcelProperty(value = "小说详情页封面规则")
    private String bookInfoCoverRule;

    /**
     * 小说详情页简介规则
     */
    @ExcelProperty(value = "小说详情页简介规则")
    private String bookInfoIntroRule;

    /**
     * 小说章节目录地址规则（章节目录在详情页中则为空）
     */
    @ExcelProperty(value = "小说章节目录地址规则", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "章=节目录在详情页中则为空")
    private String bookTocUrlRule;

    /**
     * 小说章节Id规则
     */
    @ExcelProperty(value = "小说章节Id规则")
    private String bookChapterIdRule;

    /**
     * 小说章节名称规则
     */
    @ExcelProperty(value = "小说章节名称规则")
    private String bookChapterNameRule;

    /**
     * 小说章节地址规则
     */
    @ExcelProperty(value = "小说章节地址规则")
    private String bookChapterUrlRule;

    /**
     * 小说章节目录下一页地址规则
     */
    @ExcelProperty(value = "小说章节目录下一页地址规则")
    private String bookChapterNextPageRule;

    /**
     * 小说正文规则
     */
    @ExcelProperty(value = "小说正文规则")
    private String bookContentRule;

    /**
     * 小说正文下一页地址规则
     */
    @ExcelProperty(value = "小说正文下一页地址规则")
    private String bookContentNextPageRule;

    /**
     * 小说正文需要替换的文字，换行符分割
     */
    @ExcelProperty(value = "小说正文需要替换的文字，换行符分割")
    private String bookContentReplace;

    /**
     * 线程数目默认1：表示自动设置；
     */
    @ExcelProperty(value = "线程数目默认1：表示自动设置；")
    private Integer threads;

    /**
     * 两个页面间爬取时间间隔，ms
     */
    @ExcelProperty(value = "两个页面间爬取时间间隔，ms")
    private Integer sleepTime;

    /**
     * user_agent
     */
    @ExcelProperty(value = "user_agent")
    private String userAgent;

    /**
     * 请求头
     */
    @ExcelProperty(value = "请求头")
    private String headers;

    /**
     * 是否启用代理，1：启动；2：禁用
     */
    @ExcelProperty(value = "是否启用代理，1：启动；2：禁用", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "crawl_source_config_ext_text_rule_proxy_enable")
    private Integer proxyEnable;

    /**
     * 代理host
     */
    @ExcelProperty(value = "代理host")
    private String proxyHost;

    /**
     * 代理port
     */
    @ExcelProperty(value = "代理port")
    private Integer proxyPort;


}
